home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_c / msqc25t1 / spawn.c < prev    next >
C/C++ Source or Header  |  1990-08-31  |  2KB  |  57 lines

  1. /* spawn.c: Passes modified environment to chile process */
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <process.h>
  6. #include <dos.h>
  7. #include <errno.h>
  8. #include <graph.h>
  9.  
  10. void main()
  11. {
  12. char newvar[] = "XYZ=7890",     /* New environment srting */
  13.     *envp [5],                  /* pointers to env strings */
  14.     childpath[] = "CHILD.EXE",       /* path to child */
  15.     *args[] = {"CHILD.EXE",     /* command line arguments */
  16.                 "A1", "A2", NULL},
  17.     comspec [64], path [64], prompt [64];
  18. int status;
  19.  
  20.     /* Show current environment */
  21.     _clearscreen (_GCLEARSCREEN);
  22.     puts ("In parent, orginal environment is:\n");
  23.     system ("SET");
  24.  
  25.     /* Get current environment strings for child */
  26.     sprintf (comspec, "COMSPEC= %s", getenv ("COMSPEC"));
  27.     sprintf (path, "PATH=%s", getenv ("PATH"));
  28.     sprintf (prompt, "PROMPT=%s", getenv ("PROMPT"));
  29.  
  30.     /* Load pointer array for environment srtings */
  31.     envp [0] = comspec;
  32.     envp [1] = path;
  33.     envp [2] = prompt;
  34.     envp [3] = newvar;
  35.     envp [4] = NULL;
  36.  
  37.     /* Spawn the child */
  38.     status = spawnvpe (P_WAIT, childpath, args, envp);
  39.     printf ("\n\nIn parent, spawn status = %d", status);
  40.  
  41.     /* Check for, report error */
  42.     if (status != EXIT_SUCCESS) {   /* child exit status */
  43.         puts ("\nError occurred:\n");
  44.         switch (errno) {
  45.             case E2BIG:     puts ("Argument list to long"); break;
  46.             case EINVAL:    puts ("Invalid argument"); break;
  47.             case ENOENT:    puts ("Bad path or filename"); break;
  48.             case ENOEXEC:   puts ("Exec format error"); break;
  49.             case ENOMEM:    puts ("Not enough memory"); break;
  50.         }
  51.     } else
  52.         puts (" (Successful)");
  53. }
  54.  
  55.  
  56.  
  57.